﻿using BeautySalon.Model;
using Microsoft.Win32;
using System;
using System.ComponentModel.Design;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;

namespace BeautySalon.Pages
{
    /// <summary>
    /// Логика взаимодействия для AddServicePage.xaml
    /// </summary>
    public partial class AddServicePage : Page
    {
        // Поле для хранения экземпляра добавляемой услуги 
        private Service service = new Service();

        public AddServicePage(Service selectService)
        {
            InitializeComponent();

            if (selectService != null)
            {
                service = selectService;
                Manager.IsEdit = true;
            }

            // Передача объекта класса для участия в привязке данных
            DataContext = service;

            // Передача данных из таблицы в ComboBox
            namesCmbx.ItemsSource = Entities.GetContext().Client.ToList();
            namesCmbx.SelectedValuePath = "ID";
            namesCmbx.DisplayMemberPath = "FirstName";
        }

        // Изменить фото
        private void ChangeImageBtn_Click(object sender, RoutedEventArgs e)
        {
            OpenFileDialog ofg = new OpenFileDialog();
            if (ofg.ShowDialog() == true && !string.IsNullOrWhiteSpace(ofg.FileName))
            {
                ImageTxb.Text = ofg.FileName;
                ImageTxb.Focus();
            }
            
        }

        // Сохранение записи
        private void SaveNewRecordBtn_Click(object sender, RoutedEventArgs e)
        {
            // Предварительная проверка
            StringBuilder errors = new StringBuilder();
            if (string.IsNullOrWhiteSpace(service.Title))
                errors.AppendLine("* Название услуги не введено!");
            if (Manager.IsEdit == false)
            {
                foreach (var record in Entities.GetContext().Service)
                {
                    if (record.Title == service.Title)
                        errors.AppendLine("* Такое название уже существует!");
                }
            }
            if (service.Cost == 0)
                errors.AppendLine("* Стоимость не может быть равна значению '0'");
            if (service.DurationInSeconds == 0)
                errors.AppendLine("* Длительность должна составлять определенное кол-во времени!");
            if (service.DurationInSeconds > 14400)
                errors.AppendLine("* Длительность услуги не может занимать больше 4 часов");

            // Если есть ошибки, то вывести их
            if (errors.Length > 0)
            {
                MessageBox.Show(errors.ToString());
                return;
            }

            // Добавить новую запись
            if (service.ID == 0)
                Entities.GetContext().Service.Add(service);

            try
            {
                Entities.GetContext().SaveChanges();
                MessageBox.Show("Данные сохранены");
                NavigationService.Navigate(new ServicePage());
            }
            catch (Exception ex)
            { MessageBox.Show(ex.Message); }
        }

        // Назад
        private void BackBtn_Click(object sender, RoutedEventArgs e)
        {
            NavigationService.Navigate(new ServicePage());
            Manager.IsEdit = false;
        }

        // Обработчик на запрет ввода букв в длительность
        private void DurationTxb_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.Key < Key.D0 || e.Key > Key.D9) e.Handled = true;
        }

        // Обработчик на запрет ввода букв в стоимость
        private void CostTxb_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.Key < Key.D0 || e.Key > Key.D9) e.Handled = true;
        }
    }
}
